在hard margin的情況,其實就是我們不允許任何錯誤分類發生,這也是為什麼必須要在線性可分的情況下才能使用,不然永遠不會得到結果。而soft margin就是可以允許錯誤發生,那要怎麼樣允許錯誤發生呢?其實就是多導入一個slack variable
我們把這個條件
改成
那個怪怪的念 xi,xi 一定要大於等於零, xi 就是slack varialbe,他的值如下圖所示(圖片出自:PRML - p332)
也就是當正確的時候會是零,在邊界裡面但還是為的會小於一,錯誤開始就大於一。
接著我們把hard margin的這個最佳化問題
也加入slack variable,改成最小化下面這個式子
其中 C 是我們設定要懲罰那些犯錯的點的參數,C越大懲罰越重,而 C 到無限大的情況就會讓我們回到hard margin SVM。接著一樣利用Lagrange Multiplier的的方式寫下
接著分別對 w , b, xi微分,並且令為零,得最佳解條件
因為 mu 也是langrange乘數,所以非負,因此
一樣透過KKT condition得到兩個充要條件
因此我們的 a 會有三種狀況,分別會是
後面兩種就是我們這邊的 support vector,我們這邊必須利用第二種support vector來計算 b。
所以我們這邊的SVM流程跟hard margin一樣
這就是soft margin SVM的作法。